package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Vector;

import vista.VentanaIncluirGrupo;

import modelo.Colaborador;
import modelo.GrupoColaborativo;
import modelo.Laboratorio;

public class ControladorIncluirGrupo implements ActionListener{
	
	private VentanaIncluirGrupo vg;
	private Laboratorio lab;
	private GrupoColaborativo gc;
	
	public ControladorIncluirGrupo(Laboratorio lab, GrupoColaborativo gc) {

		this.lab = lab;
		this.gc = gc;
		vg = new VentanaIncluirGrupo();
		vg.setVisible(true);
		vg.setLocationRelativeTo(null);
		vg.setResizable(false);
		vg.agregarListener(this);
		vg.bloquearCampo();
		vg.setTxtCodigoGrupo(generarCodigo());
		cargarLista();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if (e.getActionCommand().equalsIgnoreCase("Salir")){
			vg.dispose();
			}
		else if (e.getActionCommand().equalsIgnoreCase("Agregar")){
			if (vg.obtenerIndiceFila()< 0){
				vg.mostrarMensaje("ERROR, No se ha seleccionado ningun colaborador");
				return;	
			}
			else{
				cargarSeleccionados();
			}
		}else if (e.getActionCommand().equalsIgnoreCase("Guardar")){
			
			if (vg.getTxtNombreGrupo().equalsIgnoreCase("")|| vg.getTxtcedResponsable().equalsIgnoreCase("")){
				vg.mostrarMensaje("ERROR, No dejar campos vacios");
				return;
			}else if (validar()==1 && validarResponsable()==1){
				guardarGrupo();
			}
			else{
				if (validar ()==0){
					vg.mostrarMensaje("ERROR, Debe incluir al menos un Profesor Permanente");
					return;
				}else{
					vg.mostrarMensaje("ERROR, La cedula del responsable de grupo no se encuentra en la lista de los Colaboradores Seleccionados");
					return;
				}
				
			}
			
		}
		else if (e.getActionCommand().equalsIgnoreCase("Aceptar")){
			aceptarCambios();
		}
		else if (e.getActionCommand().equalsIgnoreCase("Eliminar")){
			if (vg.obtenerIndiceFilaSeleccionados()>=0){
				vg.eliminarFilaSeleccionados(vg.obtenerIndiceFilaSeleccionados());
			}
			else 
				vg.mostrarMensaje("ERROR, Debe seleccinar el colaborador a Eliminar");
		}
	}
	
	// GENERAR CODIGO
	public String generarCodigo(){
		String cod;
		int a = lab.contarGrupo()+1;
		if(a < 9) {
			cod = "GP-0"+a;
			return cod;
		}
		cod = "GP-"+a;
		return cod;
	}
	
	//METODO PARA CARGAR LISTADO DE COLABORADORES REGISTRADOS
	public void cargarLista(){
		ArrayList<Colaborador> clb = lab.getColaboradores();
		for (int i = 0; i< lab.contarColaborador(); i++){
			Colaborador col = clb.get(i);
			if (col.getEstatus() == 'E'){
				continue;
			}
			Vector<String> aux = new Vector<String>(3,1);
			String cedula = col.getCedula();
			String nombre = col.getNombre() + " " + col.getApellido();
			String tipo = col.getTipoColaborador();
			aux.add(cedula);
			aux.add(nombre);
			aux.add(tipo);
			vg.cargarListado(aux);
			}
		}

	//METODO PARA CARGAR LISTADO DE COLABORADORES SELECCIONADOS
	public void cargarSeleccionados(){	
		
		int fila = vg.obtenerIndiceFila();
		
		String ced = (String) vg.getTblCRegistrados().getModel().getValueAt(fila, 0);
		String nombre = (String) vg.getTblCRegistrados().getModel().getValueAt(fila, 1);
		String tipo = (String) vg.getTblCRegistrados().getModel().getValueAt(fila, 2);
			
		Vector <String> registrados = new Vector <String>(3,1);
			
		registrados.add(ced);
		registrados.add(nombre);
		registrados.add(tipo);
		vg.cargarListadoSeleccionados(registrados);
		vg.eliminarFila(fila);
	}
	
	//METODO GUARDAR GRUPO COLABORATIVO
	public void guardarGrupo(){
		
		String codigo = vg.getTxtCodigoGrupo();
		String nombre = vg.getTxtNombreGrupo();
		String cedResponsable = vg.getTxtcedResponsable();
		GrupoColaborativo gc = new GrupoColaborativo();
		
		gc.setCodigoGrupo(codigo);
		gc.setNombreGrupo(nombre);
		int posR = lab.buscarColaborador(cedResponsable);
		if (posR != -1){
			Colaborador resp =  lab.obtenerUnColaborador(posR);
			gc.setcolResponsable(resp);
		}
		
		for (int i = 0; i< vg.obtenerCantidadFilasSeleccionados(); i++){
			Colaborador col = new Colaborador();
			
			String ced = (String) vg.getTblCSeleccionados().getModel().getValueAt(i, 0);
			int pos = lab.buscarColaborador(ced);
			if (pos !=-1){
				col = lab.obtenerUnColaborador(pos);
				gc.incluirColaborador(col);	
			}
		}
		lab.agregarGrupo(gc);
		vg.mostrarMensaje("El grupo colaborativo "+gc.getNombreGrupo()+" ha sido registrado satisfactoriamente");
		vg.dispose();
	}
	
	//METODO QUE PERMITE VALIDAR QUE HAYA AL MENOS UN PROFESOR PERMANTENTE EN EL GRUPO
	public int validar(){
		
		int bandera = 0;
		for (int i = 0; i< vg.obtenerCantidadFilasSeleccionados(); i++){
			
			Colaborador col = new Colaborador();
			String ced = (String) vg.getTblCSeleccionados().getModel().getValueAt(i, 0);
			int pos = lab.buscarColaborador(ced);
			if (pos !=-1){
				col = lab.obtenerUnColaborador(pos);
				if (col.getTipoColaborador().equalsIgnoreCase("Profesor Permanente")){
					bandera = 1;
					return bandera;
				}
			}
		}
		return bandera;
	}
	
	//METODO QUE PERMITE VALIDAR RESPONSABLE O COOORDINADOR
		public int validarResponsable(){
			
			int bandera = 0;
			String cedResponsable = vg.getTxtcedResponsable();
			for (int i = 0; i< vg.obtenerCantidadFilasSeleccionados(); i++){
				
				Colaborador col = new Colaborador();
				String ced = (String) vg.getTblCSeleccionados().getModel().getValueAt(i, 0);
				int pos = lab.buscarColaborador(ced);
				if (pos !=-1){
					col = lab.obtenerUnColaborador(pos);
					if (col.getTipoColaborador().equalsIgnoreCase("Profesor Permanente") && cedResponsable.equalsIgnoreCase(ced)){
						bandera = 1;
						return bandera;
					}
				}
			}
			return bandera;
		}
	
	//METODO BLOQUEO BOTON GUARDAR
	public void bloquearGuardar(boolean valor){
		vg.bloquearBontonGuardar(valor);
	}
	
	//METODO BLOQUEO BOTON ACEPTAR
	public void bloquearAceptar(boolean valor){
		vg.bloquearBontonGuardar(valor);
	}
	
	//METODO BLOQUEO BOTON ELIMINAR
	public void bloquearEliminar(boolean valor){
		vg.bloquearBontonGuardar(valor);
	}
	
	//METODO BLOQUEO TXT NOMBRE
	public void bloquearNombre(boolean valor){
		vg.bloquearNombre(valor);
	}
	//METODO PARA BLOQUEAR EL TXT CEDRESPONSABLE
	public void bloquearCedResponsable(boolean valor){
		vg.bloquearCedResponsable(valor);
	}
	
	//METODO PEGAR DATOS DEL COLABORADOR DE UN GRUPO A LA TABLA
	public void PegarDatos(){
		String c = gc.getCodigoGrupo();
		String nombre = gc.getNombreGrupo();
		String cedResponsable = gc.getcolResponsable().getCedula();
	
		vg.setTxtCodigoGrupo(c);
		vg.setTxtNombreGrupo(nombre);
		vg.setTxtcedResponsable(cedResponsable);
		for (int i = 0; i < gc.contarColab();i++){
			
			Colaborador col = gc.obtenerUnColaborador(i);
			String ced = col.getCedula();
			String nom = col.getNombre()+" "+col.getApellido();
			String tipo = col.getTipoColaborador();
		
				
			Vector <String> registrados = new Vector <String>(3,1);
				
			registrados.add(ced);
			registrados.add(nom);
			registrados.add(tipo);
			vg.cargarListadoSeleccionados(registrados);
		}
	}
	//METODO ACEPTAR CAMBIOS
	public void aceptarCambios(){
	
	int fila = lab.buscarGrupo(gc.getCodigoGrupo());
	gc.getColaboradores().clear();
	for (int i = 0; i< vg.obtenerCantidadFilasSeleccionados(); i++){
		String ced = (String) vg.getTblCSeleccionados().getModel().getValueAt(i, 0);
		int pos = lab.buscarColaborador(ced);
		if (pos !=-1){
			Colaborador col = lab.obtenerUnColaborador(pos);
			gc.incluirUnColaborador(i, col);
		}
	}
		lab.setGrupo(fila, gc);
		vg.mostrarMensaje("El grupo colaborativo "+gc.getNombreGrupo()+" ha sido modificado satisfactoriamente");
		vg.dispose();
	}
}
